
#include "acnt180.h"

//tim0
static app_tim_params_t p_params_tim0;
static volatile uint32_t g_tim0_cnt = 0;
//uint16_t timer_section_index = 0;
uint16_t data_temp_a = 0;
uint16_t data_temp   = 0;
float    f_data_temp = 0;


static void app_io_event_handler(app_io_evt_t *p_evt)
{
    app_io_pin_state_t pin_level = APP_IO_PIN_RESET;

    if (p_evt->arg != NULL)
    {
        printf("%s\r\n", (char *)p_evt->arg);
    }

    if (p_evt->pin == APP_GPIO_KEY0_PIN)
    {
        data_temp_a++;
    }
}

static const app_gpiote_param_t gpiote_param[] =
{
    {APP_GPIO_KEY0_TYPE, APP_GPIO_KEY0_PIN, APP_IO_MODE_IT_FALLING, APP_IO_PULLUP, app_io_event_handler},
};


static void open_interrupt(void)
{
    app_io_deinit(APP_GPIO_KEY0_TYPE, APP_GPIO_KEY0_PIN);
    app_gpiote_init(gpiote_param, sizeof(gpiote_param) / sizeof(app_gpiote_param_t));
}

static void close_interrupt(void)
{
    app_gpiote_deinit(APP_GPIO_KEY0_TYPE, APP_GPIO_KEY0_PIN);
}

static void temp_gpio_output_init(void)
{
    uint16_t ret;
    app_io_init_t io_init = APP_IO_DEFAULT_CONFIG;
    app_io_pin_state_t pin_val;
    int cnt = 10;

    io_init.pull = APP_IO_NOPULL;
    io_init.mode = APP_IO_MODE_OUTPUT;
    io_init.pin  = APP_GPIO_KEY0_PIN;
    io_init.mux  = APP_IO_MUX;
    ret = app_io_init(APP_GPIO_KEY0_TYPE, &io_init);
    if (ret != APP_DRV_SUCCESS)
    {
        printf("APP_GPIO_KEY0_PIN init failed.\r\n");
    }
}

static void temp_gpio_input_init(void)
{
    uint16_t ret;
    app_io_init_t io_init = APP_IO_DEFAULT_CONFIG;
    app_io_pin_state_t pin_val;
    int cnt = 10;

    io_init.pull = APP_IO_NOPULL;
    io_init.mode = APP_IO_MODE_INPUT;
    io_init.pin  = APP_GPIO_KEY0_PIN;
    io_init.mux  = APP_IO_MUX;
    ret = app_io_init(APP_GPIO_KEY0_TYPE, &io_init);
    if (ret != APP_DRV_SUCCESS)
    {
        printf("APP_GPIO_KEY0_PIN init failed.\r\n");
    }
}

static void temp_gpio_input(void)
{
    app_io_deinit(APP_GPIO_KEY0_TYPE, APP_GPIO_KEY0_PIN);
    temp_gpio_input_init();
}


static void temp_gpio_output_high(void)
{
    app_io_deinit(APP_GPIO_KEY0_TYPE, APP_GPIO_KEY0_PIN);
    temp_gpio_output_init();
    app_io_write_pin(APP_GPIO_KEY0_TYPE, APP_GPIO_KEY0_PIN, APP_IO_PIN_SET);
}


static void temp_gpio_output_low(void)
{
    app_io_deinit(APP_GPIO_KEY0_TYPE, APP_GPIO_KEY0_PIN);
    temp_gpio_output_init();
    app_io_write_pin(APP_GPIO_KEY0_TYPE, APP_GPIO_KEY0_PIN, APP_IO_PIN_RESET);
}

void control_tem_measure(int *index)
{
	if(*index==1)
	{
		 data_temp_a = 0;
     temp_gpio_output_high();
	}
	else if(*index==20)
	{
		open_interrupt();		
	}
	else if(*index==65)
	{
		data_temp = data_temp_a; 
		close_interrupt(); 
		temp_gpio_output_low();		 
    *index = 0; 
		f_data_temp = data_temp_a * 0.0625 - 50.0625;
     APP_LOG_INFO(" %d--f_data_temp %f  \r\n", data_temp_a,f_data_temp); 
	}
}
float get_temp_api(void)
{
//	f_data_temp = data_temp;
//  f_data_temp = f_data_temp * 0.0625 - 50.0625;
//  APP_LOG_INFO(" f_data_temp %f  \r\n", f_data_temp); 
	return f_data_temp;
}
//static void app_tim0_event_handler(app_tim_evt_t *p_evt)
//{
//    if (*p_evt == APP_TIM_EVT_DONE)
//    {
//        g_tim0_cnt++;
//        timer_section_index++;
//        if(timer_section_index == 1)
//        {
//            data_temp_a = 0;
//            temp_gpio_output_high();
//        }
//        else if(timer_section_index == 2)
//        {
//            //test
//            //temp_gpio_input();
//            open_interrupt();
//        }
//        else if(timer_section_index == 11)
//        {	//55ms?
//            data_temp = data_temp_a; 
//            close_interrupt(); 
//            temp_gpio_output_low();		 
//            timer_section_index = 0; 
//        }
//            
//        if(g_tim0_cnt%200==1)
//        {
//            //timer_secound++;
//            //APP_LOG_INFO("g_tim0_cnt %d ", g_tim0_cnt);
//            //APP_LOG_INFO("data_temp %d ", data_temp);
//            f_data_temp = data_temp;
//            f_data_temp = f_data_temp * 0.0625 - 50.0625;
//            APP_LOG_INFO(" f_data_temp %f  \r\n", f_data_temp);
//        }
//    }
//}
float get_temp_acnt180_value(void)
{
		return f_data_temp;
}
#define APP_TEMPB_PIN                     APP_IO_PIN_11     /* GPIO27 - 16 */
#define APP_TEMPB_PIN_TYPE                APP_IO_TYPE_GPIOB

void temp_acnt180_init(void)
{
   // p_params_tim0.id = APP_TIM_ID_0;
    //p_params_tim0.init.auto_reload = SystemCoreClock / 200 - 1;
    //p_params_tim0.init.auto_reload = SystemCoreClock / 10 - 1;
    
    //app_tim_init(&p_params_tim0, app_tim0_event_handler);

   // app_tim_start(APP_TIM_ID_0);
	
    app_io_init_t io_init;
    io_init.pin  = APP_TEMPB_PIN;
    io_init.mode = APP_IO_MODE_OUTPUT;
    io_init.pull = APP_IO_PULLDOWN;
    io_init.mux  = APP_IO_MUX;
    app_io_init(APP_TEMPB_PIN_TYPE, &io_init);
    app_io_write_pin(APP_TEMPB_PIN_TYPE, APP_TEMPB_PIN, APP_IO_PIN_RESET);
	
		data_temp_a = 0;
		temp_gpio_output_high();
	  delay_ms(10);
	  open_interrupt();
	  delay_ms(50);
	  close_interrupt(); 
    temp_gpio_output_low();	
    f_data_temp = data_temp_a;
		f_data_temp = f_data_temp * 0.0625 - 50.0625;
		APP_LOG_INFO(" %d,f_data_temp %f  \r\n",data_temp_a, f_data_temp);	
}